build: Use the appropriate linker flags
authorEmmanuele Bassi <ebassi@gnome.org>
Tue, 18 Apr 2017 13:51:25 +0000 (14:51 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 3 May 2017 14:10:56 +0000 (15:10 +0100)
We need to check if the linker flags we use are available, depending on
the platform, and we need to ensure that the shared library is
versioned appropriately.

gtk/meson.build
meson.build

index 392895c822a0a857ec4ae547de4dfb5734cebd9b..f8bf7d55f15c595f0ba03982021f6a315969bd8b 100644 (file)
@@ -876,12 +876,13 @@ endforeach
 # Library
 
 libgtk = shared_library('gtk-4',
+  soversion: gtk_soversion,
   sources: [typefuncs, gtk_sources, gtkmarshal_h, gtkprivatetypebuiltins_h],
   c_args: gtk_cargs + common_cflags,
   include_directories: [confinc, gdkinc, gtkinc],
   dependencies: gtk_deps + [libgdk_dep, libgsk_dep],
   link_with: [libgdk, libgsk, included_input_modules],
-  link_args: ['-Bsymbolic'],
+  link_args: common_ldflags,
   install: true)
 
 libgtk_dep = declare_dependency(
@@ -889,7 +890,7 @@ libgtk_dep = declare_dependency(
   include_directories: [confinc, gtkinc],
   dependencies: gtk_deps + [libgdk_dep, libgsk_dep],
   link_with: libgtk,
-  link_args: ['-Bsymbolic'])
+  link_args: common_ldflags)
 
 # Installed tools
 
index 34ba0fb59ced1843f8ac2325415f53e2ed03a833..da5505ef2789fa1dd800031601fc1872916a3d23 100644 (file)
@@ -68,6 +68,8 @@ gtk_binary_version = '4.0.0'
 
 gtk_binary_age = 100 * gtk_minor_version + gtk_micro_version
 
+gtk_soversion = '0.@0@.@1@'.format(gtk_binary_age - gtk_interface_age, gtk_interface_age)
+
 gtk_api_version = '4.0'
 
 x11_enabled      = get_option('enable-x11-backend')
@@ -272,6 +274,21 @@ if get_option('default_library') != 'static'
   endif
 endif
 
+common_ldflags = []
+
+if host_machine.system() == 'linux'
+  foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
+    if cc.has_argument(ldflag)
+      common_ldflags += [ ldflag ]
+    endif
+  endforeach
+endif
+
+# Maintain compatibility with autotools
+if host_machine.system() == 'darwin'
+  common_ldflags += [ '-compatibility_version=1', '-current_version=1.0', ]
+endif
+
 confinc = include_directories('.')
 gdkinc = include_directories('gdk')
 gtkinc = include_directories('gtk')